<img src="https://github.com/halpz/re3/blob/master/res/images/logo_1024.png?raw=true" alt="re3 logo" width="200">

[![Build Status](https://img.shields.io/endpoint.svg?url=https%3A%2F%2Factions-badge.atrox.dev%2FGTAmodding%2Fre3%2Fbadge%3Fref%3Dmaster&style=flat)](https://actions-badge.atrox.dev/GTAmodding/re3/goto?ref=master)
<a href="https://discord.gg/RFNbjsUMGg"><img src="https://img.shields.io/badge/discord-join-7289DA.svg?logo=discord&longCache=true&style=flat" /></a>

## Введение

**Попытка сохранить исходный код недоступного на github проекта**

В этом репозитории можно найти весь обратный исходный код для GTA III ([master](https://hub.mos.ru/msapik/re3/tree/master/) branch) и GTA VC ([miami](https://hub.mos.ru/msapik/re3/tree/miami/) branch).

Он был протестирован и работает в Windows, Linux, MacOS и FreeBSD на x86, amd64, arm и arm64.\
Рендеринг может выполняться либо исходным RenderWare (D3D8), либо его переработанной версией [librw](https://github.com/aap/librw) (D3D9, OpenGL 2.1 или выше, OpenGL ES 2.0 или выше). Звук воспроизводится с помощью MSS (используются библиотеки dll из исходной GTA) или OpenAL.

Проект был также перенесен на [Nintendo Switch](https://web.archive.org/web/20210601040554/https://github.com/AGraber/re3-nx/),
[Playstation Vita](https://web.archive.org/web/20210203152846/https://github.com/TheOfficialFloW/re3) и
[Nintendo Wii U](https://github.com/GaryOderNichts/re3-wiiu/).

Мы пока не можем выполнить сборку для PS2 или Xbox. Если вы заинтересованы в этом, свяжитесь с нами.

## Установка

- Для работы re3 требуются игровые ассеты для ПК, поэтому вы обязательно **должны** иметь [копию of GTA III](https://store.steampowered.com/app/12100/Grand_Theft_Auto_III/).
- Соберите re3 или загрузите сборку:
  - [Windows D3D9 MSS 32bit](https://web.archive.org/web/20210216093703/https://github.com/GTAmodding/re3/releases/download/re3_v1.0/re3_win-x86-librw_d3d9-mss-1_0.zip)
  - [Windows D3D9 64bit](https://web.archive.org/web/20210216093703/https://github.com/GTAmodding/re3/releases/download/re3_v1.0/re3-win-amd64-librw_d3d9-oal-1_0.zip)
  - [Windows OpenGL 64bit](https://web.archive.org/web/20210216093703/https://github.com/GTAmodding/re3/releases/download/re3_v1.0/re3_win-amd64-librw_gl3_glfw-oal-1_0.zip)
  - [Linux 64bit](https://web.archive.org/web/20210216093703/https://github.com/GTAmodding/re3/releases/download/re3_v1.0/re3-linux-gl3-1_0.zip)
  - [MacOS 64bit x86-64](https://web.archive.org/web/20210216093703/https://github.com/GTAmodding/re3/releases/download/re3_v1.0/re3-macos-gl3-1_0.zip)
- Извлеките загруженный архив в директорию GTA 3 и запустите re3. Архив включает в себя исполняемый файл, обновленные и дополнительные игровые файлы, а в случае OpenAL требуемые библиотеки dll.

## Скриншоты

![re3 2021-02-11 22-57-03-23](https://user-images.githubusercontent.com/1521437/107704085-fbdabd00-6cbc-11eb-8406-8951a80ccb16.png)
![re3 2021-02-11 22-43-44-98](https://user-images.githubusercontent.com/1521437/107703339-cbdeea00-6cbb-11eb-8f0b-07daa105d470.png)
![re3 2021-02-11 22-46-33-76](https://user-images.githubusercontent.com/1521437/107703343-cd101700-6cbb-11eb-9ccd-012cb90524b7.png)
![re3 2021-02-11 22-50-29-54](https://user-images.githubusercontent.com/1521437/107703348-d00b0780-6cbb-11eb-8afd-054249c2b95e.png)

## Улучшения

Мы внедрили ряд изменений и улучшений в оригинальную игру.
Они могут быть настроены в `core/config.h`.
Некоторые из них можно включать и выключать во время выполнения, а некоторые нет.

* Исправлено множество мелких и крупных ошибок
* Пользовательские файлы (сохранения и настройки) хранятся в корневой директории GTA
* Настройки хранятся в файле re3.ini вместо gta3.set
* Меню отладки для выполнения и изменения различных вещей (для открытия нажмите Ctrl-M)
* Отладочная камера (для переключения нажмите Ctrl-B)
* Поворачивающаяся камера
* Поддержка контроллера XInput (Windows)
* Отсутствие загрузочных экранов между островами («использование памяти карты» в меню)
* Поддержка скинированных педов (модели с Xbox или Mobile)
* Рендеринг
  * Поддержка широкоформатных экранов (правильно масштабированные HUD, меню и FOV)
  * PS2 MatFX (отражения на автомобилях)
  * Альфа-тест PS2 (лучший рендеринг прозрачных текстур)
  * Частицы PS2
  * Рендеринг автомобилей Xbox
  * Рендеринг карты мира Xbox (требуется карта Xbox)
  * Световая подсветка Xbox
  * Капли дождя на экране Xbox
  * Более настраиваемый цветовой фильтр
* Меню
  * Карта
  * Больше опций
  * Меню конфигурации контроллера
  * ...
* Можно загружать DFF-файлы и TXD-файлы с других платформ, что может повлиять на производительность
* ...

## Предстоящие задачи

Было бы неплохо иметь или сделать следующее:

* Исправить физику для высоких значений FPS
* Повысить производительность на устройствах с низкими характеристиками, особенно в OpenGL на Raspberry Pi (если у вас есть соответствующий опыт, свяжитесь с нами)
* Сравнить код с кодом PS2 (трудно, хорошего декомпилятора нет)
* [Порт для PS2](https://web.archive.org/web/20210217192931/https://github.com/GTAmodding/re3/wiki/PS2-port)
* Порт для Xbox (менее важно)
* Выявить неиспользуемые или отладочные функции
* Сравнить сборку CodeWarrior с исходным двоичным файлом для более точного кода (очень трудоемко)

## Моддинг

Как правило, модификации ассетов (модели, текстуры, обработка, скрипты и т. д.) должны работать так же, как и в оригинальной GTA.

Скрипты CLEO работают с [CLEO Redux](https://github.com/cleolibrary/CLEO-Redux).

Моды, которые изменяют код (dll/asi, limit adjusters) *не* будут работать..
Некоторые вещи, которые делают эти моды, уже внедрены в re3 (большая часть SkyGFX, GInput, SilentPatch, Widescreen fix),
другие можно легко реализовать (увеличение лимитов, см. `config.h`),
а другие придется переписывать и интегрировать непосредственно в код.
Извините за неудобства.

## Сборка из исходного кода

При использовании premake вы можете указать переменную среды GTA_III_RE_DIR в корневую папку GTA3 , чтобы исполняемый файл перемещался туда с помощью сценария после сборки.

Чтобы клонировать репозиторий, используйте команду `git clone --recursive https://hub.mos.ru/msapik/re3.git`. Затем в клонированном репозиторий перейдите в директорию `cd re3`.

<details><summary>Linux Premake</summary>

Чтобы использовать Linux Premake, сделайте следующее: [Building on Linux](https://web.archive.org/web/20210217192751/https://github.com/GTAmodding/re3/wiki/Building-on-Linux)

</details>

<details><summary>Linux Premake(МОС 12, ROSA Linux)</summary>

Чтобы использовать Linux Premake, сделайте следующее: [Building on Linux](https://web.archive.org/web/20210217192751/https://github.com/GTAmodding/re3/wiki/Building-on-Linux)

[Подробнее на русском языке про сборку в Linux](https://habr.com/ru/articles/542872/)

```
sudo dnf in git lib64glew-devel lib64glfw-devel lib64openal-devel lib64mpg123-devel lib64sndfile-devel
git clone --recursive https://hub.mos.ru/msapik/re3
cd re3
./premake5Linux --with-librw gmake2
cd build
```

Для сборки доступны следующие конфигурации:

 - debug_linux-x86-librw_gl3_glfw-oal
 - debug_linux-amd64-librw_gl3_glfw-oal
 - debug_linux-arm-librw_gl3_glfw-oal
 - debug_linux-arm64-librw_gl3_glfw-oal
 - release_linux-x86-librw_gl3_glfw-oal
 - release_linux-amd64-librw_gl3_glfw-oal
 - release_linux-arm-librw_gl3_glfw-oal
 - release_linux-arm64-librw_gl3_glfw-oal

```
make config=debug_linux-amd64-librw_gl3_glfw-oal
```

Если компиляция прошла без ошибок, то в папке re3/bin/*ваша_конфигурация*/Debug_или_Release/ будет бинарник re3. Копируем бинарник в папку оригинальной GTA3 и запускаем.

</details>

<details><summary>Linux Conan</summary>

Установите python и conan, а затем запустите сборку.
```
conan export vendor/librw librw/master@
mkdir build
cd build
conan install .. re3/master@ -if build -o re3:audio=openal -o librw:platform=gl3 -o librw:gl3_gfxlib=glfw --build missing -s re3:build_type=RelWithDebInfo -s librw:build_type=RelWithDebInfo
conan build .. -if build -bf build -pf package
```
</details>

<details><summary>MacOS Premake</summary>

Чтобы использовать MacOS Premake, сделайте следующее: [Building on MacOS](https://web.archive.org/web/20210717004757/https://github.com/GTAmodding/re3/wiki/Building-on-MacOS)

</details>

<details><summary>FreeBSD</summary>

Чтобы использовать FreeBSD Premake, сделайте следующее: [Building on FreeBSD](https://web.archive.org/web/20210217192740/https://github.com/GTAmodding/re3/wiki/Building-on-FreeBSD)

</details>

<details><summary>Windows</summary>

Если у вас есть Visual Studio 2015/2017/2019:
- Запустите один из вариантов `premake-vsXXXX.cmd` в корневой папке.
- Откройте build/re3.sln с помощью Visual Studio и скомпилируйте решение.

Microsoft недавно прекратила распространение DX9 SDK. Вы можете загрузить архивную версию здесь: https://archive.org/details/dxsdk_jun10

**Если вы выбрали OpenAL в Windows** Вам необходимо ознакомиться с разделом [Running OpenAL build on Windows](https://web.archive.org/web/20210217192855/https://github.com/GTAmodding/re3/wiki/Running-OpenAL-build-on-Windows).
</details>

> :information_source: В premake есть опция `--with-lto`, если вы хотите, чтобы проект был скомпилирован с параметром Link Time Optimization.

> :information_source: В [config.h](https://hub.mos.ru/msapik/re3/tree/master/src/core/config.h) есть различные настройки, которые могут быть вам полезны.

> :information_source: re3 использует полностью самописный движок рендеринга вместо RenderWare; [librw](https://github.com/aap/librw/). librw предоставляется как подмодуль re3, но вы также можете использоваnь переменную окружения LIBRW для указания пути к своему собственному librw.

Если вам это необходимо, вы также можете использовать CodeWarrior 7 для компиляции re3 с помощью прилагаемого проекта codewarrior/re3.mcp — для этого требуются оригинальные библиотеки RW33 и пакет SDK DX8. Однако сборка является нестабильной по сравнению со сборками MSVC и предназначена в основном в качестве справочного материала.

## Вклад
Весь код в репозитории, который не указан в препроцессоре (например, FIX_BUGS), является **полностью** обратным кодом из оригинальных двоичных файлов. 

Мы **не** принимаем пользовательский код, если он не завернут в препроцессор, или если это не подсистема Linux/кроссплатформенная подсистема или уровень совместимости.

Мы принимаем только такие запросы на перенос:

 - Новое улучшение, которое существует как минимум в одной из GTA (если оно отсутствовало в III/VC, то оно не должно быть декомпиляцией)
 - Исправления ошибок в игре, интерфейсе пользователя или пользовательском опыте (если это исправление оригинального кода, оно должно быть указано в FIX_BUGS)
 - Платформозависимый и/или неиспользуемый код, который еще не был обращен
 - Увеличение понятности или точности обратного кода, например, «какой код создал бы эту сборку».
 - Новые кроссплатформенные подсистемы/уровни совместимости или их улучшения
 - Исправления перевода для языков, которые поддерживались в оригинальной игре
 - Код, повышающий удобство поддержки

У нас есть документ [Coding Style](https://hub.mos.ru/msapik/re3/blob/master/CODING_STYLE.md) , который на самом деле не соблюдается и не поддерживается должным образом.

Не используйте возможности C++11 или более поздних версий.


## История

Работа над re3 началась где-то весной 2018 года, изначально в качестве способа протестировать обратный код столкновений и физики внутри игры. Это было сделано путем замены отдельных функций игры их обратными аналогами с помощью библиотеки dll.

После некоторой работы проект бездействовал около года, а в мае 2019 года его возобновили и выложили на github. В то время я (aap) обратил около 10 тыс. строк кода и предположил, что в финальной версии игры будет около 200-250 тыс. строк. Вскоре к проекту присоединились другие (Fire_Head, shfil, erorcun и Nick007J в хронологическом порядке, а немного позже — Serge) и мы добились очень быстрого прогресса в течение лета 2019 года, после чего темп немного снизился.

Из-за того, что в начале пандемии коронавируса все оставались дома, у всех появилось много времени, чтобы снова поработать над re3, и в апреле 2020 года мы, наконец, получили отдельный исполняемый файл (тогда в нем было около 180 тыс. строк кода).

После первоначального ажиотажа, а также исправления и дальнейшей полировки кода в начале мая 2020 года началась работа над reVC — не с нуля, а на основе кода re3, а не путем замены функций с помощью библиотеки dll. После нескольких месяцев в основном стабильного прогресса мы посчитали, что reVC закончен в декабре.

После этого мы начали работать над reLCS, который в данный момент находится в разработке.


## Лицензия

Мы не считаем, что можем дать этому коду лицензию. Код должен использоваться только в образовательных целях, для документирования и моддинга. Мы не поощряем пиратство или коммерческое использование. Пожалуйста, поддерживаете производные работы открытыми и приписывайте соавторам их труд.
